package untiring07;

public class J29_BaseClass {

	
//	 기본 클래스 base class
//	 일부 인터페이스가 많은 추상 메서드ABCDE를 가지고 있는 경우, 이것을 구현하는 클래스는
//	 이 모든 메서드ABCDE를 재정의 해야함
//	 하지만, 실제 사용하는 메서드C가 일부라면 불필요한 메서드 
//	 ABDE를 재정의하는것은 지루하고 비효율적인 작업이 될 수 있음
//	 
//	 이런경우 구현클래스를 일반 클래스로 확장하여
//	 수정하기를 원하는 메서드만 재정의함
//	 이러한 용도로 사용하는 클래스를 base calss라 함
// 	 아래 예에서는 BadInterface 를 구현한 BadClass를 확장하여 GoodClass1,
//	 GoodClass2를  만듦
	
//	자바 웹 프로그래밍에서 서블릿 클래스를 만들때
//	Servlet이라는 5개의 추상 메서드를 포함한 인터페이스를 사용함
//	이런 경우 다 사용하지 않음에도 불구하고 5개의 추상메서드에 대한 구현 코드를 모두 작성
	
//	이에 대한 해결책으로 GenericServlet이라는 클래스를 확장해서 단 하나의 메서드, service
//	메서드만 재정의해서 사용하면 됨 여기서GenericServlet은 base class임
	 
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}
interface BadInterface{
	void A();
	char B();
	int C();
	String D();
	boolean E();
		
}
class BadClass implements BadInterface{

	@Override
	public void A() {}

	@Override
	public char B() {return 0;}

	@Override
	public int C() {return 0;}

	@Override
	public String D() {return null;}

	@Override
	public boolean E() {return false;}
	
}

class GoodClass1 extends BadClass{
	@Override
	public int C() {return super.C();}
}
class GoodClass2 extends BadClass{
	@Override
	public void A() {super.A();}
	@Override
	public boolean E() {return super.E();}
}